ES6(也稱為 ECMAScript 2015)是 JavaScript 的一次重大更新,是 ES5(ECMAScript 2009)之後的下一個主要版本。它引入了許多新的語法和功能,使 JavaScript 更加強大與現代化。以下是 ES6 相對於 ES5 的一些主要改進和新增功能:
ES5 只能使用 `var`,而 ES6 引入了更有意義的變量聲明方式:
let x = 10; // 可重新賦值,區塊作用域
const y = 20; // 常數,不可重新賦值,區塊作用域
箭頭函數語法更簡潔,並且綁定 `this` 的方式不一樣:
// ES5
var add = function(a, b) {
return a + b;
};
// ES6
const add = (a, b) => a + b;
使用反引號 `` ` `` 和 `${}` 插入變量或表達式:
let name = 'Alice';
let greeting = `Hello, ${name}!`;
可快速從陣列或物件中提取值:
// 陣列
let [a, b] = [1, 2];
// 物件
let {name, age} = {name: 'Bob', age: 30};
// 展開
let arr = [1, 2];
let newArr = [...arr, 3, 4]; // [1, 2, 3, 4]
// 收集(Rest)
function sum(...nums) {
return nums.reduce((a, b) => a + b, 0);
}
ES6 提供了更接近傳統 OOP 語言的類語法:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, I'm ${this.name}`);
}
}
支援 `import` 和 `export`,實現模組化程式設計:
// module.js
export const pi = 3.14;
// main.js
import { pi } from './module.js';
用來處理非同步操作,替代回呼地獄(callback hell):
const fetchData = () => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('Data loaded'), 1000);
});
};
fetchData().then(data => console.log(data));
可遍歷可迭代對象(如陣列):
let arr = [10, 20, 30];
for (let value of arr) {
console.log(value);
}
新增的原始資料型別,用於建立獨一無二的值:
let sym = Symbol('id');
新的資料結構:
let set = new Set([1, 2, 3]);
let map = new Map([['key', 'value']]);
| 功能 | ES5 | ES6 |
|---|---|---|
| `let` / `const` | ❌ | ✅ |
| 箭頭函數 | ❌ | ✅ |
| 模板字串 | ❌ | ✅ |
| 解構賦值 | ❌ | ✅ |
| 模組化 | ❌ | ✅ |
| Promise | ❌ | ✅ |
| Class 類別 | ❌ | ✅ |